package org.facyt.vacas.entities.vacas.restricciones;

import java.io.Serializable;
import java.math.BigDecimal;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;

import org.facyt.vacas.entities.vacas.Componente;

/**
 * @author Virginia
 * @version 1.0
 * @created 30-sep-2009 11:59:59 a.m.
 */
@Entity
@Table(name = "rest_rango", schema = "vacas")
public class RestriccionRango extends Restriccion implements Serializable,
		RestriccionI {

	// componente
	// @ManyToOne()
	// @JoinColumn(name = "fk_rest_simple_menor")
	// private RestriccionSimple restriccionMenor;
	//
	//
	// @ManyToOne()
	// @JoinColumn(name = "fk_rest_simple_mayor")
	// private RestriccionSimple restriccionMayor;

	@Column(name = "cantidad_max", columnDefinition="float4")
	private BigDecimal valorMax;

	@Column(name = "cantidad_min",columnDefinition="float4")
	private BigDecimal valorMin;

	public BigDecimal getValorMin() {
		// return getRestriccionMayor().getCantidad().floatValue();
		return this.valorMin;

	}

	public BigDecimal getValorMax() {
		// return getRestriccionMenor().getCantidad().floatValue();
		return this.valorMax;
	}

	public void setValorMax(BigDecimal valor) {
		this.valorMax = valor;
	}

	public void setValorMin(BigDecimal valor) {
		this.valorMin = valor;
	}

	public Componente getComponente() {
		return componente;
	}

	public void setComponente(Componente componente) {
		this.componente = componente;
	}

	public void finalize() throws Throwable {

	}

	public boolean esMenor() {

		return false;
	}

	public boolean esMayor() {

		return false;
	}

	public boolean esMenorIgual() {

		return false;
	}

	public boolean esMayorIgual() {

		return false;
	}

	public boolean esIgual() {

		return false;
	}

	public boolean esDoble() {

		return false;
	}

	public boolean esSimple() {

		return false;
	}

	public boolean esRango() {
		return true;
	}

	public boolean esFA() {

		return false;
	}

	public Componente getComponenteById() {

		return getComponente();
	}

	public String toStringFormulacionRestriccion(float cant, float asatisfacer) {
		return getComponenteById().getDescripcion() + " Hay: " + cant
				+ ". Debe " + this.getToString() + ": >= " + asatisfacer;
	}

	public String getToString() {
		return "[ " + this.getValorMin().floatValue() + " - "
				+ this.getValorMax().floatValue() + " ]";
	}

	public String getSignoTipo() {
		if (esMenor() || esMenorIgual())
			return "<=";
		else if (esMayor() || esMayorIgual())
			return ">=";
		else
			return "=";
	}

	/**
	 * @return
	 */
	public String getUnidadToString() {
		return getComponenteById().getUnidad().getDescripcion();
	}

	/**
	 * @return
	 */
	public String getRestriccionToString() {
		if (getComponenteById() != null)
			return ((Componente) getComponenteById()).getDescripcion();
		else
			return "RR.getRestriccionString(). el componente es nulo";

	}

	public Object clone() throws CloneNotSupportedException {
		RestriccionRango rsClon = new RestriccionRango();
		rsClon.setComponente(this.getComponente());
		// rsClon.setRestriccionMayor(this.getRestriccionMayor());
		// rsClon.setRestriccionMenor(this.getRestriccionMenor());
		rsClon.setValorMax(this.getValorMax());
		rsClon.setValorMin(this.getValorMin());
		rsClon.setEsF(this.isEsF());
		rsClon.setEsR(this.isEsR());

		return rsClon;
	}

	public String getStringRestriccion() {
		return getRestriccionToString() + " " + getToString() + " "
				+ getRFoNada();
	}

	// public Float getCantidadMaxima() {
	// return getValorMax();
	// }
	//
	// public Float getCantidadMinima() {
	// return getValorMin();
	// }
	//
	// public void setCantidadMinima(Float cantidadMayorIgual) {
	// setValorMin(cantidadMayorIgual);
	//
	// }
	//
	// public void setCantidadMaxima(Float cantidadMenorIgual) {
	// setValorMax(cantidadMenorIgual);
	//
	// }

	// public RestriccionSimple getRestriccionMenor() {
	// MenorIgual restriccionMenor = null;
	// if(restriccionMenor == null)
	// restriccionMenor = new MenorIgual(this.getAlimento(), this.getCalculo(),
	// this.getComponente(), this.isEsF(), this.isEsR(), this, isModificada(),
	// this.isEsModificable(), this.getValorMax());
	// return restriccionMenor;
	// }
	//
	// public void setRestriccionMenor(RestriccionSimple restriccionMenor) {
	// //this.restriccionMenor = restriccionMenor;
	// this.setComponente(restriccionMenor.getComponente());
	// this.setValorMax(restriccionMenor.getCantidad());
	// this.setEsF(restriccionMenor.isEsF());
	// this.setEsR(restriccionMenor.isEsR());
	// }
	//
	// public RestriccionSimple getRestriccionMayor() {
	// //return restriccionMayor;
	// MayorIgual restriccionMayor = null;
	// if(restriccionMayor == null)
	// restriccionMayor = new MayorIgual(this.getAlimento(), this.getCalculo(),
	// this.getComponente(), this.isEsF(), this.isEsR(), this.isModificada(),
	// this.isEsModificable(), this.getValorMin());
	// return restriccionMayor;
	//
	// }
	//
	// public void setRestriccionMayor(RestriccionSimple restriccionMayor) {
	// //this.restriccionMayor = restriccionMayor;
	// this.setComponente(restriccionMayor.getComponente());
	// this.setValorMin(restriccionMayor.getCantidad());
	// this.setEsF(restriccionMayor.isEsF());
	// this.setEsR(restriccionMayor.isEsR());
	// }

}